今天來聊Scala的模式比對(Pattern matching)
根據維基百科
模式比對是檢查給定記號序列中,是否存在某種模式的組成部分的行為。
簡單來說,Scala裡的模式比對(Pattern matching)是一種依據模式來檢查value的機制,作用類似Java裡的switch statement
不過更為強大,並且可以省略很多需要用if/else來判斷的語句。
以下是一些之後會談到的模式種類:
Wildcard pattern的表示方式是(_),它可以比對任何對象。
之前提到match運算式時,我們說最後要放一個default的case不然編譯時可能會出現MatchError,而那個default case就可以用萬用字元表示
val i = 10
i match:
case 10 => println("10")
case _ => println("other")
所以這邊的(_)指的是除了10以外的任何對象
Constant pattern只能比對自己
任何常量(literal)都可以當作constant,此外任何的val或單例物件也可以當作constant。
def test(x: Any) = x match
case 10 => "Int"
case 'hi' => "String"
case true => "Boolean"
Variable pattern也可以比對任何物件,類似萬用字元模式。不過不同的是,變數模式會把物件跟變數綁定在一起,如此一來就可以在case語句的右邊使用變數。
i match
case 0 => "0"
case other => "output is" + other